﻿/*
 * Created by SharpDevelop.
 * User: CeCi
 * Date: 29/03/2014
 * Time: 03:56 p.m.
 * 
 * To change this template use Tools | Options | Coding | Edit Standard Headers.
 */
using System;
using System.Data;

namespace Gestión_UTN.blimpl
{
    /// <summary>
    /// Description of ciudadblimpl.
    /// </summary>
    public class ciudadblimpl : Gestión_UTN.bl.ciudadbl
    {
        private static Gestión_UTN.da.ciudadda createCiudad = Gestión_UTN.factories.dafactory.createCiudad();
        private static Gestión_UTN.da.provinciada createProvincia = Gestión_UTN.factories.dafactory.createProvincia();

        public ciudadblimpl()
        {
        }

        public bool SaveCiudad(Gestión_UTN.bo.Ciudadbo ciudad)
        {
            bool ingresada = false;

            try
            {
                if (null != ciudad)
                {
                    Gestión_UTN.Entities.Provincia prov = createProvincia.FindProvinciaByNombre(ciudad.Provincia);

                    if (null != prov)
                    {
                        ingresada = createCiudad.SaveCiudad(ciudad.CodPostal, ciudad.Nombre, prov.Prov_id);
                    }

                }

            }
            catch (exceptions.daexception ex)
            {
                ingresada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                ingresada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return ingresada;
        }

        public bool DeleteCiudad(int codPostal)
        {
            bool eliminada = false;

            try
            {
                if (0 != codPostal)
                {
                    eliminada = createCiudad.DeleteCiudad(codPostal);
                }

            }
            catch (exceptions.daexception ex)
            {
                eliminada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                eliminada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return eliminada;
        }

        public bool ModifyCiudad(int codPostal_anterior, Gestión_UTN.bo.Ciudadbo ciudad)
        {
            bool modificada = false;

            try
            {
                if (0 != codPostal_anterior && null != ciudad)
                {
                    Gestión_UTN.Entities.Provincia prov = createProvincia.FindProvinciaByNombre(ciudad.Nombre);

                    if (null != prov)
                    {
                        modificada = createCiudad.ModifyCiudad(codPostal_anterior, ciudad.CodPostal,
                                                               ciudad.Nombre, prov.Prov_id);
                    }

                }

            }
            catch (exceptions.daexception ex)
            {
                modificada = false;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                modificada = false;
                throw new exceptions.blexception(ex.Message);
            }

            return modificada;
        }

        public System.Data.DataTable FindAllCiudades()
        {
            DataTable tablaCiudades = null;

            try
            {
                tablaCiudades = createCiudad.FindAllCiudades();
            }
            catch (exceptions.daexception ex)
            {
                tablaCiudades = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                tablaCiudades = null;
                throw new exceptions.blexception(ex.Message);
            }

            return tablaCiudades;
        }

        public Gestión_UTN.bo.Ciudadbo FindCiudadByCodPostal(int codPostal)
        {
            Gestión_UTN.bo.Ciudadbo ciudad = null;

            try
            {
                if (0 != codPostal)
                {
                    Gestión_UTN.Entities.Ciudad ciu = createCiudad.FindCiudadByCodPostal(codPostal);

                    if (null != ciu)
                    {
                        Gestión_UTN.Entities.Provincia prov = createProvincia.FindProvinciaById(ciu.Prov_id);

                        if (null != prov)
                        {
                            ciudad = new Gestión_UTN.bo.Ciudadbo(ciu.CodPostal, ciu.Nombre, prov.Nombre);
                        }
                    }
                }
            }
            catch (exceptions.daexception ex)
            {
                ciudad = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                ciudad = null;
                throw new exceptions.blexception(ex.Message);
            }

            return ciudad;
        }

        public Gestión_UTN.bo.Ciudadbo FindCiudadByNombre(string nombre)
        {
            Gestión_UTN.bo.Ciudadbo ciudad = null;

            try
            {
                if (!nombre.Equals(""))
                {
                    Gestión_UTN.Entities.Ciudad ciu = createCiudad.FindCiudadByNombre(nombre);

                    if (null != ciu)
                    {
                        Gestión_UTN.Entities.Provincia prov = createProvincia.FindProvinciaById(ciu.Prov_id);

                        if (null != prov)
                        {
                            ciudad = new Gestión_UTN.bo.Ciudadbo(ciu.CodPostal, ciu.Nombre, prov.Nombre);
                        }
                    }
                }
            }
            catch (exceptions.daexception ex)
            {
                ciudad = null;
                throw new exceptions.blexception(ex.Message);
            }
            catch (Exception ex)
            {
                ciudad = null;
                throw new exceptions.blexception(ex.Message);
            }

            return ciudad;
        }
    }
}
